本文作者:陈进坚
个人博客:https://jian1098.github.io
CSDN博客:https://blog.csdn.net/c_jian
简书:https://www.jianshu.com/u/8ba9ac5706b6
联系方式:jian1098@qq.com
grpc教程
视频:https://www.bilibili.com/video/BV1GE411A7kp
代码:https://github.com/zhuge20100104/grpc-demo
打开go-module
1 | set GO111MODULE=on //windows |
编辑器settings-GO-Go Modules
勾选
安装protoc
Linux
创建目录
1 | mkdir proto |
打开https://github.com/protocolbuffers/protobuf/releases
下载最新版本的protoc-*-linux-x86_64.zip
1 | wget https://github.com/protocolbuffers/protobuf/releases/download/v3.12.3/protoc-3.12.3-linux-x86_64.zip |
解压
1 | unzip protoc-3.12.3-linux-x86_64.zip |
添加到path
1 | vim /etc/profile |
把你的bin路径加到最后保存
1 | export PATH=$PATH:/root/protoc/bin |
刷新配置表
1 | source /etc/profile |
查看版本
1 | protoc --version |
Windows
打开https://github.com/protocolbuffers/protobuf/releases
下载最新版本的protoc-*-win64.zip
新建一个文件夹并加压,然后把bin目录添加到环境变量即可
查看版本
1 | protoc --version |
安装protoc-gen-go
执行命令
1 | go get -u github.com/golang/protobuf/protoc-gen-go |
然后会在$GOPATH/bin
目录下发现protoc-gen-go.exe
安装IDE插件
此步骤可选
在goland插件库中安装Protobuf Support
grpc流程
创建proto文件
创建pbfiles/Prod.proto
文件,复制下面的代码保存
1 | syntax="proto3"; |
生成.pb.go文件
创建services
目录然后在pbfiles目录下执行命令
1 | protoc --go_out=../services Prod.proto |
会得到services/Prod.pb.go
文件
在pbfiles/Prod.proto
文件新增服务代码
1 | service ProService{ |
执行下面的命令
1 | protoc --go_out=plugins=grpc:../services Prod.proto |
services/Prod.pb.go
文件会生成更多的代码
创建业务逻辑文件
在生成的.pb.go
文件中找到GetProdStock
的接口,然后复制,创建services/ProdService.go
,然后实现GetProdStock
方法的具体逻辑
1 | package services |
创建服务端
创建server/server.go
,并写入以下代码
1 | package main |
创建客户端
创建client/client.go
,并写入以下代码
1 | package main |
启动服务
在命令行执行go run server/server.go
,然后在另一个终端执行go run client/client.go
即可
同时提供rpc和http服务
时提供rpc
和http
服务的grpc框架
https://github.com/grpc-ecosystem/grpc-gateway
第三方字段验证库
除了自行对参数字段进行验证,也可以选用第三方库验证字段
1 | github.com/envoyproxy/protoc-gen-validate/validate |
流模式
服务端流
User.proto
1 | syntax = "proto3"; |
服务端UserService.go
1 | package services |
客户端
1 | package main |
客户端流
服务端
1 | package services |
客户端
1 | package main |
双向流
服务端UserService.go
1 | package services |
客户端
1 | package main |